package rootdb

import (
	"errors"

	"gitee.com/xiaoyutab/xgotool/optional/xcache"
	"gitee.com/xiaoyutab/xgotool/xnum"
)

// 获取设备详情信息
//
//	id	设备ID
func DerviceInfo(id int64) (*Dervice, error) {
	if id <= 0 {
		return nil, errors.New("设备ID传输错误")
	}
	der := Dervice{}
	cache_key := xcache.Key("rootdb.dervice.info.by.id", id)
	if xcache.Exists(cache_key) {
		if err := xcache.GetStruct(cache_key, &der); err == nil {
			return &der, nil
		}
	}
	// 查询MAC地址存在的设备ID
	conn, err := Connect()
	if err != nil {
		return nil, err
	}
	err = conn.Table(der.TableName()).Where("id", id).Limit(1).Find(&der).Error
	if err != nil {
		return nil, err
	}
	if der.Id == 0 {
		// MAC地址未找到
		return nil, errors.New("设备不存在")
	}
	xcache.SetStruct(cache_key, der)
	if _, ok := _default.cache[der.Id]; !ok {
		_default.cache[der.Id] = []string{cache_key}
	} else if !xnum.InArray(cache_key, _default.cache[der.Id]) {
		_default.sync.Lock()
		_default.cache[der.Id] = append(_default.cache[der.Id], cache_key)
		_default.sync.Unlock()
	}
	return &der, nil
}
